/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package moviefansystem;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Frank Eggink
 */
public final class RealDatabase implements IDatabase {

    private static Connection localConnection;
    private static Connection centralDatbaseConnection;

    /**
     * Constructor for RealDatabase it executes the method
     * connectToLocalDatabase
     */
    public RealDatabase() {
        try {
            this.connectToLocalDatabase();
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(RealDatabase.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * This methods makes the connection to the local database that is running
     * at the Moviefan Shop It sets up two connections: localConnection and
     * centralDatabaseConnection
     *
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    public void connectToLocalDatabase() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        localConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/lokale_database", "root", "");
        centralDatbaseConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/centrale_filmgegevens", "root", "");
    }

    @Override
    //Methode werkt, alleen meeste klantgegevens wordt niets mee gedaan!!
    public int voegNieuweKlantToe(Klant k) {

        //TODO: meeste klantgegevens wordt niets meer gedaan!!

        //throw new UnsupportedOperationException("Not supported yet.");
        String klantVoornaam;
        String klantAchternaam;
        String klantTussenvoegsel;
        String klantAdres;
        String klantPostcode;
        String klantWoonplaats;
        int klantRekeningnummer;

        int klantNummer = -1;
        try {
            klantVoornaam = k.getNaam();
            klantTussenvoegsel = k.getTussenvoegsel();
            klantAchternaam = k.getAchternaam();
            klantAdres = k.getAdres();
            klantPostcode = k.getPostcode();
            klantWoonplaats = k.getWoonplaats();
            klantRekeningnummer = k.getBankrekeningNr();

            PreparedStatement statement = (PreparedStatement) localConnection.prepareStatement("INSERT INTO lokale_database.klanten (Klantnummer, Voornaam, Tussenvoegsel, Achternaam, Adres, Huisnummer, Woonplaats, Postcode, Telefoonnummer, Email, Geboortedatum, Ingangsdatum, Rekeningnummer) VALUES (NULL, ? , ? , ? , ?, '-1', ? , ?, '1234567890', 'email@email.nl', '0000-00-00', '0000-00-00', ?)", PreparedStatement.RETURN_GENERATED_KEYS);
            statement.setString(1, klantVoornaam);
            statement.setString(2, klantTussenvoegsel);
            statement.setString(3, klantAchternaam);
            statement.setString(4, klantAdres);
            statement.setString(5, klantWoonplaats);
            statement.setString(6, klantPostcode);
            statement.setInt(7, klantRekeningnummer);

            int success = statement.executeUpdate();

            //klantnummer ophalen
            ResultSet rs = statement.getGeneratedKeys();
            if (rs != null && rs.next()) {
                klantNummer = rs.getInt(1);
            }

            System.out.println("Klantnummer : " + klantNummer);

            return klantNummer;
        } catch (SQLException ex) {
            Logger.getLogger(RealDatabase.class.getName()).log(Level.SEVERE, null, ex);
        }
        return klantNummer;
    }

    @Override
    //Methode werkt
    public Klant zoekKlant(int klantnummer) {
        String klantVoornaam = "";
        String klantAchternaam = "";
        String klantTussenvoegsel = "";
        String klantAdres = "";
        String klantPostcode = "";
        String klantWoonplaats = "";
        int klantRekeningnummer = 0;
        try {
            //PreparedStatement statement = (PreparedStatement) localConnection.prepareStatement("SELECT klanten.voornaam, klanten.tussenvoegsel, klanten.achternaam, klanten.adres, klanten.postcode, klanten.woonplaats, klanten.rekeningnummer "
            //       + "FROM klanten "
            //        + "WHERE klanten.klantnummer LIKE ?");
            PreparedStatement statement = (PreparedStatement) localConnection.prepareStatement("SELECT * FROM klanten WHERE klantnummer = ?");

            statement.setString(1, Integer.toString(klantnummer));
            ResultSet result = statement.executeQuery();
            //writeResultSetKlant(result);


            //klant maken
            while (result.next()) {
                klantVoornaam = result.getString("klanten.voornaam");
                klantTussenvoegsel = result.getString("klanten.tussenvoegsel");
                klantAchternaam = result.getString("klanten.achternaam");
                klantAdres = result.getString("klanten.adres");
                klantPostcode = result.getString("klanten.postcode");
                klantWoonplaats = result.getString("klanten.woonplaats");
                klantRekeningnummer = result.getInt("klanten.rekeningnummer");
            }

            Klant k = new Klant(klantVoornaam, klantTussenvoegsel, klantAchternaam);
            k.setAdres(klantAdres);
            k.setPostcode(klantPostcode);
            k.setWoonplaats(klantWoonplaats);
            k.setBankrekeningNr(klantRekeningnummer);
            //TOEGEVOEGD OP 2-12-2012 Klopt dit nu?
            k.setKlantNr(klantnummer);

            return k;
        } catch (SQLException ex) {
            Logger.getLogger(RealDatabase.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    @Override
    //TODO methode werkt alleen nog nakijken!!
    public boolean maakNieuweReservering(int klantnummer, int filmId) {
        try {
            // throw new UnsupportedOperationException("Not supported yet.");

            //kijk of film te reserveren is
            PreparedStatement statement = (PreparedStatement) localConnection.prepareStatement("SELECT * FROM voorraad WHERE artikel_id = ? AND status = 1");
            statement.setInt(1, filmId);
            ResultSet result = statement.executeQuery();
            if (!result.isBeforeFirst()) {
                System.out.println("Kan niet reserveren, er geen film die beschikbaar is");
                return false;
            } else {
                //zet film op gereserveerd      
                PreparedStatement updateStatement = (PreparedStatement) localConnection.prepareStatement("UPDATE voorraad SET status = 2 WHERE artikel_id = ? AND status = 1");
                updateStatement.setInt(1, filmId);
                int updateResult = updateStatement.executeUpdate();

                //voeg toe aan transacties
                PreparedStatement insertStatement = (PreparedStatement) localConnection.prepareStatement("INSERT INTO lokale_database.transacties (nummer, artikel_id, klant_id, type, ingangsdatum, duur, betaalde_prijs) VALUES (NULL, ? , ? , '2' ,'00-00-0000', '1', '5')"); //2 is hier gereserveerd

                insertStatement.setInt(1, klantnummer);
                insertStatement.setInt(2, filmId);

                int success = insertStatement.executeUpdate();

                System.out.println("Gereserveerd");
                return true;
            }

        } catch (SQLException ex) {
            Logger.getLogger(RealDatabase.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;

    }

    @Override
    //TODO : kan nog niet testen want klantnummer is nog niet correct
    //methode is nog niet af en deze methode wordt niet aangeroepen door gui of controller!!!
    public boolean maakNieuweVerhuurd(int klantnummer, int filmId) {
        //throw new UnsupportedOperationException("Not supported yet.");
        Klant k = zoekKlant(klantnummer);

        ArrayList<Film> tempList = getPersonlijkeItemsInBezit(k);
        if (tempList.size() > 5) {
            System.out.println("Klant heeft te veel items in bezit, en kan niet meer huren!");

            return false;
        } else {
            try {

                //TODO : mag klant wel huren ... heeft hij/zij niet al teveel films in bezit?
                //ja klant mag huren
                //is film beschikbaar?
                PreparedStatement statement = (PreparedStatement) localConnection.prepareStatement("SELECT * FROM voorraad WHERE artikel_id = ? AND status = 1"); // status 1 is beschikbaar
                statement.setInt(1, filmId);
                ResultSet result = statement.executeQuery();
                if (!result.isBeforeFirst()) {
                    //kan niet verhuren
                    System.out.println("Kan film niet verhuren omdat er geen film beschikbaar is!");
                    return false;
                } else {
                    //kan wel verhuren
                    //zet film op verhuurd      
                    PreparedStatement updateStatement = (PreparedStatement) localConnection.prepareStatement("UPDATE voorraad SET status = 3 WHERE artikel_id = ? AND status = 1"); //status op 3 zetten ?? (klopt dit??
                    updateStatement.setInt(1, filmId);
                    int updateResult = updateStatement.executeUpdate();


                    //voeg toe aan transacties
                    PreparedStatement insertStatement = (PreparedStatement) localConnection.prepareStatement("INSERT INTO lokale_database.transacties (nummer, artikel_id, klant_id, type, ingangsdatum, duur, betaalde_prijs) VALUES (NULL, ? , ? , '1' ,'00-00-0000', '1', '5')");  //1 = gehuurd

                    //AANGEPAST OP 02-12-2012 (film en klantnummer verkeerd om)
                    insertStatement.setInt(1, filmId);
                    insertStatement.setInt(2, klantnummer);

                    int success = insertStatement.executeUpdate();

                    System.out.println("Verhuurd");

                    //voeg toe aan geschiedenis van de klant
                    //is niet nodig omdat dit pas gebeurd als de klant het item heeft teruggebracht
                    //dan komt er tevens in de geschiedens tabel te staan of de klant de film wel of niet op tijd heeft ingeleverd.


                    System.out.println("Film is tevens toegevoegd aan de geschiedenis van de klant.");


                    return true;
                }
            } catch (SQLException ex) {
                Logger.getLogger(RealDatabase.class.getName()).log(Level.SEVERE, null, ex);
            }
            return false;

        }
    }

    @Override
    public boolean verwijderReservering(int klantnummer, int filmId) {
        throw new UnsupportedOperationException("Not supported yet.");


        //TODO: HOE KAN IK BIJ DE KLANT KOMEN???
        //Klant k = zoekKlant(klantNummer);
        
        
        
        

        //heeft deze klant ook daadwerkelijk deze film gereserveerd
        //zoek dat op in transacties a.d.h.v. filmId

        //is dit de laatste reservering?
        //dan voorraad aanpassen zodat anderen kunnen reserveren ? / huren?



    }

    //Methode werkt, alleen klantnummer dat bij klant hoort is onjuist, in de database staat ander klantnummer!!!
    //ook artikelnummer klopt niet en is niet instelbaar !!  (in database klopt deze)
    @Override
    public ArrayList<Film> getPersonlijkeItemsGehuurd(Klant klant) {
        //throw new UnsupportedOperationException("Not supported yet.");

        //dit is de huurgeschiedenis
        //
        //
        ArrayList<Film> historyList = new ArrayList();
        int artikelNummer = -1;

        //HIER ZIT EEN GROTE FOUT!!!!!!! (klantnummer klopt niet!!!)
        //int klantNummer = klant.getKlantNr(); //TODO : aanpassen want dit nummer staat wel in database maar niet goed in KLANT!!!
        //hardcoded werkt het wel
        int klantNummer = klant.getKlantNr(); //TODO : aanpassen want dit nummer staat wel in database maar niet goed in KLANT!!!
        try {
            //kijk in tabel geschidenis
            //zoek artikel_id bij klant_id
            PreparedStatement statement = (PreparedStatement) localConnection.prepareStatement("SELECT artikel_id FROM geschiedenis WHERE klant_id = ? ");

            statement.setString(1, Integer.toString(klantNummer));


            //zet deze artikel_id's (films) stuk voor stuk om in films


            //zoekFilm moet werken op nummer!!!!!!!!!!!!!!!!!!!!!!!!!!
            ResultSet result = statement.executeQuery();
            while (result.next()) {
                //zoek per film gevonden???
                artikelNummer = result.getInt("artikel_id");
                System.out.println("artikel geschiedenis:" + artikelNummer);

                historyList.add(zoekFilm(artikelNummer));

            }
            //en voeg deze toe aan lijst 
            //retourneer lijst met films
            return historyList;
        } catch (SQLException ex) {
            Logger.getLogger(RealDatabase.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    //TODO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    //Methode werkt, alleen klantnummer dat bij klant hoort is onjuist, in de database staat ander klantnummer!!!
    //ook artikelnummer klopt niet en is niet instelbaar !!  (in database klopt deze)
    @Override
    public ArrayList<Film> getPersonlijkeItemsGereseveerd(Klant klant) {
        //throw new UnsupportedOperationException("Not supported yet.");
        //
        //
        ArrayList<Film> reservedList = new ArrayList();
        int artikelNummer = -1;

        int klantNummer = klant.getKlantNr();
        //int klantNummer = klant.getKlantNr(); //TODO : aanpassen want dit nummer staat wel in database maar niet goed in KLANT!!!
        try {
            //kijk in tabel transacties
            //zoek artikel_id (welke film heeft klant), waarbij status op uitgeleend staat
            PreparedStatement statement = (PreparedStatement) localConnection.prepareStatement("SELECT artikel_id FROM transacties WHERE klant_id = ? AND type = 2"); //type = 2 gereserveerd


            statement.setString(1, Integer.toString(klantNummer));
            //zet deze artikel_id's (films) stuk voor stuk om in films


            //zoekFilm moet werken op nummer!!!!!!!!!!!!!!!!!!!!!!!!!!
            ResultSet result = statement.executeQuery();
            while (result.next()) {
                //zoek per film gevonden???
                artikelNummer = result.getInt("artikel_id");
                System.out.println("artikel gereserveerd:" + artikelNummer);

                reservedList.add(zoekFilm(artikelNummer));
            }
            //en voeg deze toe aan lijst 
            //retourneer lijst met films
            return reservedList;
        } catch (SQLException ex) {
            Logger.getLogger(RealDatabase.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;

    }

    //TODO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    //Methode werkt, alleen klantnummer dat bij klant hoort is onjuist, in de database staat ander klantnummer!!!
    //ook artikelnummer klopt niet en is niet instelbaar !!  (in database klopt deze)
    @Override
    public ArrayList<Film> getPersonlijkeItemsInBezit(Klant klant) {
        //
        //
        ArrayList<Film> hiredList = new ArrayList();
        int artikelNummer = -1;

        int klantNummer = klant.getKlantNr();

        //int klantNummer = klant.getKlantNr(); //TODO : aanpassen want dit nummer staat wel in database maar niet goed in KLANT!!!
        try {
            //kijk in tabel transacties
            //zoek artikel_id (welke film heeft klant), waarbij status op uitgeleend staat
            PreparedStatement statement = (PreparedStatement) localConnection.prepareStatement("SELECT artikel_id FROM transacties WHERE klant_id = ? AND type = 1"); //type = 1 gehuurd

            //zet deze artikel_id's (films) stuk voor stuk om in films
            statement.setString(1, Integer.toString(klantNummer));

            //zoekFilm moet werken op nummer!!!!!!!!!!!!!!!!!!!!!!!!!!
            ResultSet result = statement.executeQuery();
            while (result.next()) {
                //zoek per film gevonden???

                artikelNummer = result.getInt("artikel_id");
                System.out.println("artikel in bezit:" + artikelNummer);

                hiredList.add(zoekFilm(artikelNummer));

            }

            //en voeg deze toe aan lijst 

            //retourneer lijst met films
            return hiredList;
        } catch (SQLException ex) {
            Logger.getLogger(RealDatabase.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;

    }

    @Override
    public int voegNieuweFilmToe(Film film) {

        //TODO: invullen code
        //film ontrafelen

        int filmAantal = film.getAantal();
        String filmTitel = film.getNaam();
        int filmMedia = film.getTypeFilm();

        int artikelNummer = -1;


        //hoe vaak hebben we deze film
        try {
            for (int i = 0; i < filmAantal; i++) {
                PreparedStatement statement = (PreparedStatement) localConnection.prepareStatement("INSERT INTO lokale_database.voorraad (artikel_id, filmnaam, soort , media, prijs, status, extra_filminformatie) VALUES (NULL, ? , 'onbekend' , ? , '-1.00', ?, '-1')", PreparedStatement.RETURN_GENERATED_KEYS);
                statement.setString(1, filmTitel);
                statement.setInt(2, filmMedia);
                statement.setInt(3, 1); // status beschikbaar = 1


                int success = statement.executeUpdate();

                //klantnummer ophalen
                ResultSet rs = statement.getGeneratedKeys();
                if (rs != null && rs.next()) {
                    artikelNummer = rs.getInt(1);
                }

                System.out.println("Artikelnummer : " + artikelNummer);

                // return artikelNummer; TODO OPLOSSEN



            }

            //zo vaak als aantal film toevoegen aan database 
            //krijgen we nog melding terug?
            return artikelNummer;
        } catch (SQLException ex) {
            Logger.getLogger(RealDatabase.class.getName()).log(Level.SEVERE, null, ex);
        }
        return artikelNummer;
    }

    //Moet nog aangepast worden
    //Methode zoekFilm wordt voorlopig als alternatief gebruikt
    @Override
    public Film zoekFilm(int artikelNummer) {
        //throw new UnsupportedOperationException("Not supported yet.");

        String filmNaam = "";
        int filmMedia = -1;
        int filmAantal = 1;

        try {
            //zoek film
            PreparedStatement statement = (PreparedStatement) localConnection.prepareStatement("SELECT * FROM voorraad WHERE artikel_id = ?");

            statement.setInt(1, artikelNummer);

            ResultSet result = statement.executeQuery();

            while (result.next()) {
                filmNaam = result.getString("voorraad.filmnaam");
                filmMedia = result.getInt("voorraad.media");
            }

            Film f = new Film(filmNaam, filmMedia, filmAantal);
            //TOEGEVOEGD OP 02-12-2012
            f.setArtiekelNr(artikelNummer);

            return f;
        } catch (SQLException ex) {
            Logger.getLogger(RealDatabase.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    //DEZE METHODE WORDT NIET GEBRUIKT!!!!!!!!!!!!!!!!!
    //@Override
    //public boolean toonFilmGegevens() {
    //    throw new UnsupportedOperationException("Not supported yet.");
    //}
    @Override
    public boolean leenItemUit(int klantnummer, int filmId) {
        throw new UnsupportedOperationException("Not supported yet.");
        
        //methode is overbodig 
        //we gebruiken methode maakNieuweVerhuurd
        //die methode moeten we nog wel hernoemen ivm onduidelijke methodenaam
    }

    @Override
    public boolean neemItemIN(int klantnummer, int filmId) {
        try {
            System.out.println("klantnummer = "+klantnummer + " filmId = "+ filmId);
            
            
            
                        //zet film op beschikbaar      
                        PreparedStatement updateStatement = (PreparedStatement) localConnection.prepareStatement("UPDATE voorraad SET status = 1 WHERE artikel_id = ? AND status = 3"); //status op 1 zetten ?? (klopt dit??
                        updateStatement.setInt(1, filmId);
                        int updateResult = updateStatement.executeUpdate();


                        //zoek de transactie van de klant en zet type op 3
                        PreparedStatement updateStatement2 = (PreparedStatement) localConnection.prepareStatement("UPDATE lokale_database.transacties SET type = 3 WHERE klant_id = ? AND artikel_id = ?");   //3 = geretourneerd

            
                        updateStatement2.setInt(1, klantnummer);
                        updateStatement2.setInt(2, filmId);
                        int updateResult2 = updateStatement2.executeUpdate();

                        System.out.println("Film teruggebracht");

                    

                        //System.out.println("Film is tevens toegevoegd aan de geschiedenis van de klant.");

            
            
            
            
            
            
            
            
            
            
            
            
            //bepaal klant
            //bepaal item
            //heeft klant deze ook daadwerkelijk in bezit?
            //zo ja verwijder transactie ?
            //pas voorraad status weer aan
            //voeg item toe aan geschiedenis met vermelding of de film wel/niet op tijd was

            //fout in database? hoe doe ik dat met de prijs?
            //mss extra veld met afgewerkt
            //of transactie aanpassen
            //of alleen voorraad aanpassen is voldoende??

            //TODO: nog verder uitwerken
        } catch (SQLException ex) {
            Logger.getLogger(RealDatabase.class.getName()).log(Level.SEVERE, null, ex);
        }
return true;
        
        

    }

    //TODO : methode werkt, alleen nog testen
    @Override
    public boolean toonFinancieelOverzicht() {
        int bedrag;
        ArrayList<Integer> pricesList = new ArrayList<>();

        try {
            //throw new UnsupportedOperationException("Not supported yet.");
            //tel alle bedragen op bij transacties als film verhuurd is geweest 
            //gedurende bepaalde periode

            //tel voorlopig alle betaalde prijzen op als een film is verhuurd geweest.
            PreparedStatement statement = (PreparedStatement) localConnection.prepareStatement("SELECT betaalde_prijs FROM transacties WHERE type = 1");
            ResultSet result = statement.executeQuery();
            if (!result.isBeforeFirst()) {
                //we hebben geen resultaten
                System.out.println("Financieel overzicht : er zijn geen resultaten!");
                return false;
            } else {
                //we hebben wel resultaten
                System.out.println("Financieel overzicht : er zijn wel resultaten!");
                //lees result
                //stop alles in lijst
                //tel op en display
                //functie hoort dit terug te geven!!!

                while (result.next()) {
                    //zoek per film gevonden???
                    bedrag = result.getInt("betaalde_prijs");
                    pricesList.add(bedrag);
                }
                int totaalbedrag = 0;
                for (Integer i : pricesList) {
                    totaalbedrag += i;
                }

                System.out.println("Het totaalbedrag is : " + totaalbedrag);
                return true;

            }
        } catch (SQLException ex) {
            Logger.getLogger(RealDatabase.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }

    //some helper methods
    //TODO: change the methods
    /**
     * This method writes the metadata from the ResultSet to the screen
     *
     * @param resultSet
     * @throws SQLException
     */
    private void writeMetaData(ResultSet resultSet) throws SQLException {
        // Now get some metadata from the database
        // Result set get the result of the SQL query

        System.out.println("The columns in the table are: ");

        System.out.println("Table: " + resultSet.getMetaData().getTableName(1));
        for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) {
            System.out.println("Column " + i + " " + resultSet.getMetaData().getColumnName(i));
        }
    }

    /**
     * This method writes newlines to the screen
     *
     * @param numberOfNewLines is the number of newlines
     */
    private void printNewLines(int numberOfNewLines) {
        int i;
        for (i = 0; i < numberOfNewLines; i++) {
            System.out.println();
        }
    }

    /**
     * This method writes the information in the ResultSet to the screen
     *
     * @param result is the resultset that needs to be printed to the screen
     * @throws SQLException
     */
    private void writeResultSet(ResultSet result) throws SQLException {
        while (result.next()) {
            String filmTitel = result.getString("films.Titel");
            String filmBeschrijving = result.getString("films.beschrijving");
            String categorie = result.getString("categorie.Naam");
            String taal = result.getString("taal.Naam");

            //System.out.println(result.getString(1) + " / " + result.getString(2) + " / " + result.getString(3) + " / " + result.getString(4));
            System.out.println(filmTitel);
            System.out.println(filmBeschrijving);
            System.out.println(categorie);
            System.out.println(taal);
        }
    }

    /**
     * This method writes the information in the ResultSet to the screen
     *
     * @param result is the resultset that needs to be printed to the screen
     * @throws SQLException
     */
    private void writeResultSetKlant(ResultSet result) throws SQLException {
        while (result.next()) {
            String klantVoornaam = result.getString("klanten.voornaam");
            String klantAchternaam = result.getString("klanten.achternaam");
            int klantRekeningnummer = result.getInt("klanten.rekeningnummer");


            //System.out.println(result.getString(1) + " / " + result.getString(2) + " / " + result.getString(3) + " / " + result.getString(4));
            System.out.println(klantVoornaam);
            System.out.println(klantAchternaam);

        }
    }

    //Methode gaat zoeken in de database op een omschrijving
    //en maakt een lijst met films
    @Override
    public ArrayList<Film> zoekFilm(String omschrijving) {
        try {
            //throw new UnsupportedOperationException("Not supported yet.");
            ArrayList<Film> foundMoviesList = new ArrayList<>();


            //zoek film (nog aanpassen)!!!!!
            //hoe zoek je alles??
            //ADDED : 02-12-2012 (moet nu werken)
            PreparedStatement statement = (PreparedStatement) localConnection.prepareStatement("SELECT * FROM voorraad WHERE filmnaam LIKE ? OR filmnaam LIKE ? or filmnaam LIKE ?");

            String tempString = "%" + omschrijving + "%";
            String tempString2 = "%" + omschrijving;
            String tempString3 = omschrijving + "%";

            statement.setString(1, tempString);
            statement.setString(2, tempString2);
            statement.setString(3, tempString3);
            ResultSet result = statement.executeQuery();
            return foundMoviesList;
        } catch (SQLException ex) {
            Logger.getLogger(RealDatabase.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    @Override
    public ArrayList<Film> getAlleFilms() {
        //throw new UnsupportedOperationException("Not supported yet.");

        //toon alle films die in het filiaal op voorraad zijn...
        String filmNaam = "";
        int filmMedia = -1;
        int filmAantal = 1;
        ArrayList<Film> filmList = new ArrayList();

        try {
            //haal alle films in de voorraad op, zowel die beschikbaar zijn als gereserveerd
            PreparedStatement statement = (PreparedStatement) localConnection.prepareStatement("SELECT * FROM voorraad");

            ResultSet result = statement.executeQuery();

            while (result.next()) {
                filmNaam = result.getString("voorraad.filmnaam");
                filmMedia = result.getInt("voorraad.media");
                Film f = new Film(filmNaam, filmMedia, filmAantal);
                filmList.add(f);

            }
            return filmList;
        } catch (SQLException ex) {
            Logger.getLogger(RealDatabase.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
}
